{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.cluster import KMeans\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "#读取四张表的数据\n",
    "prior = pd.read_csv(\"./data/instacart/order_products__prior.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "products = pd.read_csv(\"./data/instacart/products.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "orders = pd.read_csv(\"./data/instacart/orders.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "aisles = pd.read_csv(\"./data/instacart/aisles.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "#合并四张表到一张表中\n",
    "_mg = pd.merge(prior,products,on=['product_id','product_id'])\n",
    "_mg = pd.merge(_mg,orders,on=['order_id','order_id'])\n",
    "mt = pd.merge(_mg,aisles, on=['aisle_id','aisle_id'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>order_id</th>\n",
       "      <th>product_id</th>\n",
       "      <th>add_to_cart_order</th>\n",
       "      <th>reordered</th>\n",
       "      <th>product_name</th>\n",
       "      <th>aisle_id</th>\n",
       "      <th>department_id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>eval_set</th>\n",
       "      <th>order_number</th>\n",
       "      <th>order_dow</th>\n",
       "      <th>order_hour_of_day</th>\n",
       "      <th>days_since_prior_order</th>\n",
       "      <th>aisle</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>33120</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Organic Egg Whites</td>\n",
       "      <td>86</td>\n",
       "      <td>16</td>\n",
       "      <td>202279</td>\n",
       "      <td>prior</td>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>8.0</td>\n",
       "      <td>eggs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>26</td>\n",
       "      <td>33120</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>Organic Egg Whites</td>\n",
       "      <td>86</td>\n",
       "      <td>16</td>\n",
       "      <td>153404</td>\n",
       "      <td>prior</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>16</td>\n",
       "      <td>7.0</td>\n",
       "      <td>eggs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>120</td>\n",
       "      <td>33120</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>Organic Egg Whites</td>\n",
       "      <td>86</td>\n",
       "      <td>16</td>\n",
       "      <td>23750</td>\n",
       "      <td>prior</td>\n",
       "      <td>11</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>10.0</td>\n",
       "      <td>eggs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>327</td>\n",
       "      <td>33120</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>Organic Egg Whites</td>\n",
       "      <td>86</td>\n",
       "      <td>16</td>\n",
       "      <td>58707</td>\n",
       "      <td>prior</td>\n",
       "      <td>21</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "      <td>8.0</td>\n",
       "      <td>eggs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>390</td>\n",
       "      <td>33120</td>\n",
       "      <td>28</td>\n",
       "      <td>1</td>\n",
       "      <td>Organic Egg Whites</td>\n",
       "      <td>86</td>\n",
       "      <td>16</td>\n",
       "      <td>166654</td>\n",
       "      <td>prior</td>\n",
       "      <td>48</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>9.0</td>\n",
       "      <td>eggs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>537</td>\n",
       "      <td>33120</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>Organic Egg Whites</td>\n",
       "      <td>86</td>\n",
       "      <td>16</td>\n",
       "      <td>180135</td>\n",
       "      <td>prior</td>\n",
       "      <td>15</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>3.0</td>\n",
       "      <td>eggs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>582</td>\n",
       "      <td>33120</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>Organic Egg Whites</td>\n",
       "      <td>86</td>\n",
       "      <td>16</td>\n",
       "      <td>193223</td>\n",
       "      <td>prior</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>19</td>\n",
       "      <td>10.0</td>\n",
       "      <td>eggs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>608</td>\n",
       "      <td>33120</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>Organic Egg Whites</td>\n",
       "      <td>86</td>\n",
       "      <td>16</td>\n",
       "      <td>91030</td>\n",
       "      <td>prior</td>\n",
       "      <td>11</td>\n",
       "      <td>3</td>\n",
       "      <td>21</td>\n",
       "      <td>12.0</td>\n",
       "      <td>eggs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>623</td>\n",
       "      <td>33120</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Organic Egg Whites</td>\n",
       "      <td>86</td>\n",
       "      <td>16</td>\n",
       "      <td>37804</td>\n",
       "      <td>prior</td>\n",
       "      <td>63</td>\n",
       "      <td>3</td>\n",
       "      <td>12</td>\n",
       "      <td>3.0</td>\n",
       "      <td>eggs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>689</td>\n",
       "      <td>33120</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>Organic Egg Whites</td>\n",
       "      <td>86</td>\n",
       "      <td>16</td>\n",
       "      <td>108932</td>\n",
       "      <td>prior</td>\n",
       "      <td>16</td>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "      <td>3.0</td>\n",
       "      <td>eggs</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   order_id  product_id  add_to_cart_order  reordered        product_name  \\\n",
       "0         2       33120                  1          1  Organic Egg Whites   \n",
       "1        26       33120                  5          0  Organic Egg Whites   \n",
       "2       120       33120                 13          0  Organic Egg Whites   \n",
       "3       327       33120                  5          1  Organic Egg Whites   \n",
       "4       390       33120                 28          1  Organic Egg Whites   \n",
       "5       537       33120                  2          1  Organic Egg Whites   \n",
       "6       582       33120                  7          1  Organic Egg Whites   \n",
       "7       608       33120                  5          1  Organic Egg Whites   \n",
       "8       623       33120                  1          1  Organic Egg Whites   \n",
       "9       689       33120                  4          1  Organic Egg Whites   \n",
       "\n",
       "   aisle_id  department_id  user_id eval_set  order_number  order_dow  \\\n",
       "0        86             16   202279    prior             3          5   \n",
       "1        86             16   153404    prior             2          0   \n",
       "2        86             16    23750    prior            11          6   \n",
       "3        86             16    58707    prior            21          6   \n",
       "4        86             16   166654    prior            48          0   \n",
       "5        86             16   180135    prior            15          2   \n",
       "6        86             16   193223    prior             6          2   \n",
       "7        86             16    91030    prior            11          3   \n",
       "8        86             16    37804    prior            63          3   \n",
       "9        86             16   108932    prior            16          1   \n",
       "\n",
       "   order_hour_of_day  days_since_prior_order aisle  \n",
       "0                  9                     8.0  eggs  \n",
       "1                 16                     7.0  eggs  \n",
       "2                  8                    10.0  eggs  \n",
       "3                  9                     8.0  eggs  \n",
       "4                 12                     9.0  eggs  \n",
       "5                  8                     3.0  eggs  \n",
       "6                 19                    10.0  eggs  \n",
       "7                 21                    12.0  eggs  \n",
       "8                 12                     3.0  eggs  \n",
       "9                 13                     3.0  eggs  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mt.head(10)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "交叉表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "cross = pd.crosstab(mt['user_id'],mt['aisle'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>aisle</th>\n",
       "      <th>air fresheners candles</th>\n",
       "      <th>asian foods</th>\n",
       "      <th>baby accessories</th>\n",
       "      <th>baby bath body care</th>\n",
       "      <th>baby food formula</th>\n",
       "      <th>bakery desserts</th>\n",
       "      <th>baking ingredients</th>\n",
       "      <th>baking supplies decor</th>\n",
       "      <th>beauty</th>\n",
       "      <th>beers coolers</th>\n",
       "      <th>...</th>\n",
       "      <th>spreads</th>\n",
       "      <th>tea</th>\n",
       "      <th>tofu meat alternatives</th>\n",
       "      <th>tortillas flat bread</th>\n",
       "      <th>trail mix snack mix</th>\n",
       "      <th>trash bags liners</th>\n",
       "      <th>vitamins supplements</th>\n",
       "      <th>water seltzer sparkling water</th>\n",
       "      <th>white wines</th>\n",
       "      <th>yogurt</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>user_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>10 rows × 134 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "aisle    air fresheners candles  asian foods  baby accessories  \\\n",
       "user_id                                                          \n",
       "1                             0            0                 0   \n",
       "2                             0            3                 0   \n",
       "3                             0            0                 0   \n",
       "4                             0            0                 0   \n",
       "5                             0            2                 0   \n",
       "6                             0            0                 0   \n",
       "7                             0            0                 0   \n",
       "8                             0            1                 0   \n",
       "9                             0            0                 0   \n",
       "10                            0            1                 0   \n",
       "\n",
       "aisle    baby bath body care  baby food formula  bakery desserts  \\\n",
       "user_id                                                            \n",
       "1                          0                  0                0   \n",
       "2                          0                  0                0   \n",
       "3                          0                  0                0   \n",
       "4                          0                  0                0   \n",
       "5                          0                  0                0   \n",
       "6                          0                  0                0   \n",
       "7                          0                  0                0   \n",
       "8                          0                  0                0   \n",
       "9                          0                  6                0   \n",
       "10                         0                  0                0   \n",
       "\n",
       "aisle    baking ingredients  baking supplies decor  beauty  beers coolers  \\\n",
       "user_id                                                                     \n",
       "1                         0                      0       0              0   \n",
       "2                         2                      0       0              0   \n",
       "3                         0                      0       0              0   \n",
       "4                         0                      0       0              0   \n",
       "5                         0                      0       0              0   \n",
       "6                         0                      0       0              0   \n",
       "7                         2                      0       0              0   \n",
       "8                         1                      0       0              0   \n",
       "9                         2                      0       0              0   \n",
       "10                        0                      0       0              0   \n",
       "\n",
       "aisle    ...  spreads  tea  tofu meat alternatives  tortillas flat bread  \\\n",
       "user_id  ...                                                               \n",
       "1        ...        1    0                       0                     0   \n",
       "2        ...        3    1                       1                     0   \n",
       "3        ...        4    1                       0                     0   \n",
       "4        ...        0    0                       0                     1   \n",
       "5        ...        0    0                       0                     0   \n",
       "6        ...        0    0                       0                     0   \n",
       "7        ...        0    0                       0                     0   \n",
       "8        ...        0    0                       0                     0   \n",
       "9        ...        0    0                       0                     0   \n",
       "10       ...        0    0                       0                     0   \n",
       "\n",
       "aisle    trail mix snack mix  trash bags liners  vitamins supplements  \\\n",
       "user_id                                                                 \n",
       "1                          0                  0                     0   \n",
       "2                          0                  0                     0   \n",
       "3                          0                  0                     0   \n",
       "4                          0                  0                     0   \n",
       "5                          0                  0                     0   \n",
       "6                          0                  0                     0   \n",
       "7                          0                  0                     0   \n",
       "8                          0                  0                     0   \n",
       "9                          0                  0                     0   \n",
       "10                         0                  0                     0   \n",
       "\n",
       "aisle    water seltzer sparkling water  white wines  yogurt  \n",
       "user_id                                                      \n",
       "1                                    0            0       1  \n",
       "2                                    2            0      42  \n",
       "3                                    2            0       0  \n",
       "4                                    1            0       0  \n",
       "5                                    0            0       3  \n",
       "6                                    0            0       0  \n",
       "7                                    0            0       5  \n",
       "8                                    0            0       0  \n",
       "9                                    2            0      19  \n",
       "10                                   0            0       2  \n",
       "\n",
       "[10 rows x 134 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cross.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "主成分分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "pca = PCA(n_components=0.9)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "data = pca.fit_transform(cross)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(500, 27)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#data.shape 把样本数量减少\n",
    "x = data[:500]\n",
    "x.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "假设用户一共分为四个类别,实例化KMeans"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "km = KMeans(n_clusters=4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,\n",
       "       n_clusters=4, n_init=10, n_jobs=None, precompute_distances='auto',\n",
       "       random_state=None, tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "km.fit(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "predict = km.predict(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,\n",
       "       0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,\n",
       "       1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0,\n",
       "       0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,\n",
       "       0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\n",
       "       0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,\n",
       "       1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0,\n",
       "       0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 1, 0, 0, 0,\n",
       "       0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,\n",
       "       0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n",
       "       0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3,\n",
       "       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,\n",
       "       0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0], dtype=int32)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 720x720 with 0 Axes>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 720x720 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#显示聚类的结果\n",
    "plt.figure(figsize=(10,10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x1a22e01850>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAD4CAYAAAAJmJb0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3xUVfr48c+ZlmRSIEBooVcpupQgCiIWLCCKva0Fy+qu+mXVxbWwupav/nTtDRXLV2SxKzZARBQ7JXRESoAACaEECKnTz++PO4GUmSQk0zI879drXsyce+eeZ4bJM3fOPUVprRFCCBGfTNEOQAghRPhIkhdCiDgmSV4IIeKYJHkhhIhjkuSFECKOWaIdQFVt2rTR3bp1i3YYQgjRrCxbtqxQa50RaFtMJflu3bqRnZ0d7TCEEKJZUUptC7ZNmmuEECKOSZIXQog4JkleCCHimCR5IYSIY01O8kqpzkqp75VSfyilfldK/d1f3kopNV8ptcn/b3rTwxVCxBOnx8mKghVsP7g92qHErVCcyXuAf2it+wEnALcqpfoD9wALtNa9gQX+x0IIAcDbK94m48kMTpl+Cn1f6stJb53EnrI90Q4r7jQ5yWutC7TWy/33S4A/gExgAjDdv9t04Pym1iWEiA+/7viVW+feSomrhGJnMQ6PgyX5Szj3vXOjHVrcCWmbvFKqGzAYWAy001oXgPFFALQN8pyblFLZSqnsvXv3hjIcIUSMeva3Z6lwV1Qrc/vcrNm9hg2FG6IUVXwKWZJXSqUAnwC3a62LG/o8rfU0rXWW1jorIyPggC0hImbtnrW8vfJtFuYuxKd90Q4nbu0o3oGm9loWVrOV3WW7oxBR/ArJiFellBUjwc/UWn/qL96tlOqgtS5QSnUApLFNxCy3183FH17M/C3zMSkTSikyUzNZOHEh7VPaRzu8uHNWz7NYuWslTq+zWrnb62ZQ+0FRiio+haJ3jQLeBP7QWj9TZdMXwLX++9cCnze1LiHC5alfn2L+lvlUeCooc5dR6ipl8/7NXP3p1dEOrenK8yH3fSiYDz5PtKMBYNLwSbS2t8Zmth0qS7Ym88DoB0hLSItiZPFHNXX5P6XUScBPwBqg8vftfRjt8h8CXYDtwCVa6/11HSsrK0vL3DUiGro/153cg7m1ym1mG3sm76FFYovIB9VUWsOq+2D9c2CyGmWWFDh9AbToF93YgMLyQp785Ulmb5pN2+S2/OPEf3BOn3OiHVazpJRaprXOCrgtltZ4lSQvoqX9U+0DtgUnmBPYcccOMpKb4fWi/Nnw82XgLatSqCC5G5y3GZSKVmQixOpK8jLiVQjggmMuwFp5tltFj/QezTPBA2yaWiPBA2hw7oUDK6ISkog8SfJCAA+f+jAdUzuSbE0GINGSSIothennT6/nmTHMHaSTmzKBp2byF/EqpuaTFyJaMpIz+P2W3/nv6v/y0/af6Nu6LzcOuZEOqR2iHVrjdbkM9i8Hb3n1cq2h9bDoxCQiTtrkhYhXngr4dhQcXG802ygzmGww/C3odnm0oxMhVFebvJzJCxGvLElwxq+w/UPI/xIS20Pvm6FF/2hHJiJIkrwQ8cxsg+5XGTdxVJILr0IIEcckyQtxtPI6oOh3cBRGOxIRRtJcI0Qs0xr2/AglG6HFQGhzQmgGMa1/Hlb/C1Dgc0HmeDhxOliSm35sEVMkyQtxhLYVbePrnK+xW+2c1/e88E154NwPC06F0i2gfUZyb3EsnDYfrCmNP27e58Z0B1W7VubPhkXXw0kfND1uEVOkuUaII/DwDw9zzMvHcOe8O7ll9i10fKYj83LmhaeypbdC8XrwlBoJ2VNmjFRddW+TDrsh+wGuyS9nQC5cvBOWOwCfw0j+rqKQhC5ihyR5IRpocd5invjlCRweB+WeckrdpZS7y7now4soc4V4BKn2Qd4nRlNKVT4nbJ3R6MOuKFhB1po1vFsC69zwaRmMyoMF5YDJAk5pn483kuSFaKB3Vr2Dw+OoVW5SJr7O+Tq0lWltJPpA/Inf6XGyvGA5uUW5DT7snd/cSalP462sBijXcMseQFkhuWtTohYxSNrkhWggh9cRdLUol9cVsLzRTGbIGAV7foBqKyiZoeM43l7xNpO+noRC4fK5GNx+MLMum0W7lHZ1HnZx3uKA5TlucBz3OIkBJmkTzZucyQvRQJcNuOzQBGZVuX1uzux5ZugrPP41sKWzw5fI3/fAkO0mLttjYYbtxMOLYLuMRbCX7lzK+PfG13vIVkmtApYnWhKw9flLqF+BiAGS5IVooDN6nMGF/S4k2ZqMQmExWUiyJPHi2BdpbW8d+grT+rB51HyO2654pdjECqePjw66uG7e3ZS7q0865vF5WLd3HesL19d5yDtPvBO71V6tLMmSxM1Zt2BSkg7ikTTXCNFASimmnz+dG4fcyGfrPyPZmsxVx11F3zZ9w1bnfT89QbHHeaiZSKPxam+t/QYlwFC7pmzXD9C6b9C+9LefcDt5xXm8kv0KNrMNl8fFJQMu4fExj4ftNYjoklkohYhhbZ9sy97yvUG32xXM7gjDEo21N1OsdlT6IDj1a7CmBn1ekaOIzfs307VlV9rY24QhchFJsjKUEM1UXc1ANpONx9vA8ERINkGqCZS3HPYvg2W313ncloktGdpxqCT4o4AkeSFi2OTht2O3JFQrSzAncMExF3DniXdyXQsTSTX/in1OyH3X6IZ5qMwDjj3gc4c/aBFTpE1eiFh18A+uz72fTWk+nj8ACQqcmDm9x+m8c8E7pNhS4P1nag+YAn+ZNnpfbnge1jxkTEhmskK/f8LAKbKQ91FCzuSFiEVaww/nolx7eby1m53djbb3jd1tfHXiFUaCB2g/htp/xgranmys5br5TVg1BdxFxtQFnhJY9//gj6ci/YpElEiSFyIW5b4HpZsPPUw3w8gk6GyqgE2vHN5v6AtgSwdzkvHYnAjWFjDMv8/aR2qv8eoth3WPV2/OEXErJM01Sqm3gPHAHq31QH9ZK+ADoBuQC1yqtT4QivqEiGs+D2TfGny7t+Lw/dSecO5G44x9fzakD4KeN0JihrHdURD4GK4DoL2gpMU23oXqTP5t4OwaZfcAC7TWvYEF/sdCiPoU/mYk4IBM0O3P1YsSWkH/u4xpggfcezjBA6QFWc81uasxIZmIeyFJ8lrrH4H9NYonANP996cD54eiLiHiXZmziDJPReCNlhTofUvDDzbkKTBXH+GK2Q6Dn258gKJZCWebfDutdQGA/9+2gXZSSt2klMpWSmXv3Rt80IcQR4vLFr6A1+epVe7DZPSKsSQ1/GDtx8Apc6DNCLCmQ6ssGPUJdLkwhBGLWBb132ta62nANDBGvEY5HCGialvRNhZs/5krE+CD9mAGbArKNGx0+Ri6+iFI7QPug8aI1g5j60/67UbDmb9EJH4Re8KZ5HcrpTporQuUUh2APWGsS4i4kFecR4I5gdllDvpug6tSobUZ5pXBfh8s71IOP10IFjtgMrpJnjIHMkZEO3QRo8LZXPMFcK3//rXA52GsS4hmJdicUf0z+h+aYTLfA08cgH8Wwk8VMPHQVDTaWArQU2Kc0S88B0I9n72IGyFJ8kqp94DfgL5KqTyl1A3A48AZSqlNwBn+x0IctXzax+M/P06b/7TB/LCZ/i/3Z/7m+Ye2l7vLGTtzbK3nmYAUE9wYbL1w7YPd34UnaBERrlIXXnewHlVNE5LmGq31FUE2nR6K4wsRD6YsmMILS144dKb+R+EfTHh/At9e8y0jOo/g0R8fZdWuVbhrzC/T2gRLu4C9rlMyb5DeOCKmbftxG1/d/BX7c/ajzIpjrzyWsS+OxZZsC1kdMuJViAgod5fz/OLnay32UeGp4MGFDwLwzup3cHhrryFb5IO0hDQw2UCZax9cu6HdqeEIW4RR4fpCZo6dSeH6QnweH16nl7XvreWjSz4KaT2S5IWIgF2lu4KuvLRu7zqAoOvHKpMVffybMHYldDgbLP4lCJXFmM5g6ItgaxmWuIMp21PG3nV78brC08RwNPjt6d/wOKt3lfU4POR+n8uBraGbHCDqXSiFOBp0SOmAJvDF1k5pnQC4cuCVvLjkRZxe56FtCsWx7Y6jVY+LjYLRX8DOuZD3GVhbQpdLoTQHNk2DjmcZI1nDyHHQwSdXfsLWBVsxW80os+KsZ89i8HWDw1pvPNqzbg/aW/szYU4wU7S1iPTu6SGpR5K8EBGQZE3izhPu5KnfnsLhqd4ks3LXSuZumsv9o+/n681fk1uUS6mrlGRrMgmWBGZcMOPwzsoEmecYt4IFMP/E6lMgdDgHElpCwTywpEHfSdD3f4znhcBHl37EtoXb8Lq8eJ1GvXNvm0t693S6ndItJHUcLTqf0JmC7IJav4Y8Dg8Z/TOCPOvIyfJ/QkSI1pp+L/djw74NtbZ1a9mNLZO24NVeZm+czdKdS+nesjuXDbzs8LTCVXkd8EEyxqJ/dTDboesVcMIbTY6/OK+YF3u/iMdRezRur7G9+POcPwd4lgimOK+YqQOn4ix2Uvkjz2q3MvCKgZz3xnlHdKy6lv+TM3khIkQpxc6SnQG35RXnUeIqIS0hjQnHTGDCMRPqPljOm9Sb4MGYVnjrf+G4B8He6Yhjrqp0dylmmzlgkj+442CTjn00SuuUxl+W/IVvJn9D7sJcEtISGP734Zx454khrUeSvDjqVbgrcHldtEgM1hE9dNrY21DiKqlVbjVZMWFib9leWttbB71Ie8j+JQ2vVDvh50vh1G/AevhXgcvr4osNX5BblEtWxyxGdx2NqmO1qDbHtMHnqf3FYrKa6HF6j4bHEyfc5W6WTl3KmvfWYLPbyLoli4GXD6zzPaypdZ/WXPFFsB7ooSFJXhy19pXv4/ovrufrTV/jw0f/jP68dd5bDO04NGx13jXyLu765i7K3GWHypIsSfRM70nGUxlorUlPSuf5s5/n0gGXBj7Ixpch9wi72e1fBouuN5pttv6XrQWLGLn4C0q9XhweJwmWBI5rdxzfXv0tSdbAc+HYkm2c+sipfP/A97jLjL78JouJhLQERv5z5JHF08x5XV7eGvkWhRsK8VQYv2wKVhSw7YdtjH91fJSjq07a5MVRSWvNkNeG8Pve36sNPkq1pbL+tvV0TO0YtnrvW3Afzy1+DpvZhsvjIjMtk/zi/Gp95O1WO19d8RWndq/R/337J/DbNbVXe2oIZTXO5L1ORuSWs9hRvcEn0ZLI5BMn88hpj9R5mA1fbuCXJ36hdFcpPc7owclTTiatU9qRx9OMrZ65mq9u/urQl10lS6KFv639G616topoPHW1yUuSF0elRXmLGPPOmGpn1AAJ5gTuHnk3D536UFjrL3YWs+XAFtJsafSf2v9Qt0kz0MoMB7zwao/u3JBUbKzi1PI4yHoBsv8HilYFP3D6EDiwCgjUf91oRjjg1bTfAoFmu+mc1pntd2xv6suLe7OuncXqd1bXKrel2Bj70lgGXTsoovHIhVchathyYEvAdm+n18n6wvVhrz8tIY1B7QexvnA9VrMVp9fJXekwJd2YWtgEmNTWw5m4aCV8fzaoeoa7H1hex0bjhK6uy7XeoCtSiarSMtMwWU343DXeTQUp7QL0hooiGfEqjkqD2g/CE2BhDrvVzojOkZu2t1vLbqDhlhbw71bQwgxJJkgwgbXm9TtvBZgaflEvmNZmGJBQeV5/WII5gSsGhvciYLwYcuMQzNYaU0wo47pFjzGxdRFakrw46mitMSkTJ3Y6kURz4qFyi7KQlpDGxEETIxZLoiWRf43+F/9qBcn1/jVqcBWFpN7/toOWJkj2Z/oUWwq9WvXigdEPhOT48S69RzqXfHQJSa2SsKXasNqttO7TmmsXXovJEltpVdrkm4mffoIXXoCCAjj3XPjb3yDt6LrWFRK/bP+Fyz+5nAMVB/BpH8m2ZBQKj8/D+D7jeXzM42G76FoX/a4JFWTag3Ap9sL7pbDFY+b4Y67i3NNex2q2RjSG5s7n8bF79W4sSRbaHNPmiLpPhpK0yTdzr7wCkydDub9DxfLlMG2a8W+L8Hftjhu7S3dz9syzKXWVHipzeBy0sbeh4B8FJFgSohabSjsGiv+IaJ1pZripBYAXKn4BSfBHzGQx0WFIh2iHUafY+l0haikrq57gASoqYOdOI/mLhpuxekatdniNxuFx8NXGr0JWT34+PPMMPPggLF4MDfqxPORpYwqCOoXxLNFTVv8+olmSJB/jli8HS4DfWw4HfPZZ5ONpzvKK82pNDgbg9rkpKC0ISR2zZkHv3nDfffDII3DaaTBxYgMSfcexMPpLSOtXx04haM4JNB+9skLnC5p+bBGTJMnHuNatwVO7EwgA7dpFNpbmbnTX0QEn+/L4PPy47Ud+3fFrk45fVgZXX2380nI6weczfoF98gnMmdOAA7Q+HsrD3EddA6ZEYwESMH49JLWHY/9d9/MqdsPK+2D+KGPkbNHa8MYpQkaSfIzr3x969gRzjRMwux1uvz06MTVX5/Y9l2PaHEOSpfqwfY/Pw8frPubMGWcy+ZvJjT7+99/X/n8CI/nPmFG7vJb8rwj/n6TXWHSkz23Q+RIY/B8453dIbBv8KWXbYPYAWP8M7P0Ztr4D84ZDwTdhjlWEgiT5ZmDOHOjXD5KTjR41SUnw6KNwqqz4dkQsJgs/TPyBf4/+N73Se6GqtHFrNGXuMqYuncraPY07SzXV8dcUKPnX4ikxphAON9c+WP8c7F8Kjj3GQuB1WXW/0XXT51/MRHuNaRV+uhhW/guKa0+dLGKHJPlmoFMnWL0afvsNPv8cdu2Ss/jGslvt3H3S3dw45EbMptqZ1+1zN/oi7KmnBm57T06Ga69twAF2f2es1xoRPijLhXVPwLxh4KkxF47W4NgLngpjAZIA0yRoTwl63eMwd7CxMpWISZLkmwml4Nhj4ZRTpH98KCRaErGo2le0LcrCjoM7GDZtGMmPJdPv5X58su6TBh0zKQk+/NBoSrPbwWqFxJZFnHjTu+xqN4PC8sLgT67YZUw+Fmk+J5TvhK1V2pPyPodP28GsTPioZdBfFwpQeI2RuMv+Do46Xp+IGhkMJUJKa2Pg1rZtMHSocU0hFuUX59PrxV61ettYTVbMJnO1crvVzstjX2bi4InV9vX6vCzKW4TT62RE5xEkWozRs/v2wccfwy/7P+Ej79VYzRY0Go/Pw9RxU7lu8HVQvBGyJ8Ge78GcCCoBXHvD/rqD6nQBnPypscDIb1fX2KjQyoSqa14bSyoc/yp0uzKsYYrA6hoMFfYzeaXU2UqpDUqpHKXUPeGuT0TPrl1GUj/nHLjlFsjKggsvBHekWiCOQGZaJm9NeIskSxKptlRSbCkkWZLolNapVuIvd5dzz4J7qHpClL0zm8xnMhk7cywXfHABbZ9sy6d/fAoYPaIuuGoPH/uuxuGtoMRVQqmrFIfHwS1zbmHrrqUwbzh78uaxusJFhbM4ugkek3G27jwIi28IsF2D9uHU4PTV0R3UJIOpYlFYk7xSygy8DIwF+gNXKKVi9NxONNU110BODpSWGreKCpg3D559NtqRBXbFwCvIvzOfV8e/ymvjXyP/znx2l+0OuO++in2HpiWucFdwxowz2F22mxJXCcXOYkpcJVz16VVsObAFgFl/zAo4xN3r8zJtwSTO23aQLrlw0g5ouwWeOxC2lwnU10/fB3t+hM87gy/wN7LGzGUF8I9CqAh0LO2DDmNDEaoIsXCfyR8P5Gitt2itXcD7QD2LV4rmqKgIfvihdp/+8nJ49dXoxFQfr89LkaOIs3udzZXHXkl6Ujqd0zoH3DfFmoLdaoxInb1pNl5f7aYLr/YyfeV0wJguIdA+Hp+HGVsX8U25xqmhREOphin74IvSWrtHjrfM6N0TZMCVwssmF7x8EB7bDxU+KPNBiQ88ygqjPq62tKCIHeFO8pnAjiqP8/xlhyilblJKZSulsvfujeZPVtEUTqdxcTiQiorIxtIQn/7xKR2e7sDAVwbS8emOjH93PEWOIh459ZFDybxSZY+cyvnnD1QcCDjvusvrYm+58Rke13tcwPnqNZoCLzhr5NJyDY+H8Wy+qfNmqZRevN8BMszwYhEM3g53FxpfTOaB90PHs4/oeAe2HGD1zNVs+XYLPm8DFiQXjRbuCcoCfbSqfby11tOAaWBceA1zPCJM2raFbt1gQ40u01YrnH9+VEIKKntnNlfPuppy9+Fug/O3zOf8989n4cSFlLpKuXfBveyr2EeKNYW7T7qbu0fefWjfk7ueHHAu+hRrCuN6jwOgd+veTB4xmad/exqHx4HWGpvZhtPrDDo5QUGQkc3hUOEz5q1vEGWF4x7m2CV/Ib97KfPKYJ8PRidBt6QUyKixvuvBPyDnNSjPh47joNsVxsVljGmeZ/91NqveWWVMyasgsWUiExdOJL1HemhfpADCn+TzgKq/fzsBO8Ncp4gCpWD6dBgzxrjQ6nQa3QjbtIGHH452dNU9/evTVLir/7xweV0syV/C5v2buW7wdUwcNJFSVynJtuRqZ+T5xfmMnTmWmr3S7FY7wzsNZ2yvw+3SD5/6MOf2OZeZa2bi8XnYULiBb7d+GzDJm4FTAq+fHXIrHPBhKdzfCuwNSvQmaDMckjKx+rYyPsW/XJUpwZhrp12VUXmVa9D6XKA9UDAX1j8LZ/0GlmTWzFzD6pmr8TgOf6O5y9y8f/77/G3130L6OoUh3El+KdBbKdUdyAcuB6SPVZwaPhzWr4fXX4eNG2HUKGMul5QYa6rdWrQVHSDV2sw28kvy6dmqJ0opUhNSa+1z7nvnsrVoa7UyhWJc73G8e+G7tQZYDcscxrDMYXh9Xto/3T5gPGYg1QT/bt3411QfnwaP/9+7CuFnB5ybDMcmGHWX+4yf2HYVoGnHpEBZjES9+gHY9gEoE3S/xpjzpvIJXpfRO6fqIuOeMijNgY2vQP/JLHl5Sa3Fr7VPsz9nP/s374/4AthHg7Amea21Ryl1GzAP47P8ltb693DWKaIrM9OYYjeWndLtFFbuWnlo8exKTq+TY9seG/A5Hp+HCe9PYMWuFbW2aTTZ+dlBF9xYX7ie0985ncLyQjqa4Z/pxhn0e8WQ54XTkuDeVpDvgSf3G8n2ijQ4KfHI29K1hp8c8G2ZsSD45SnQzgL/LYHpB+HjjrDUaVwTGJUHY5NhdCLke+GjEhO/97DRkhqDn5J7QLL/B3nWi8YNwHUQdi8ESwpknAQHVgTuxuOtgO0fQv/JtRJ8JZPZFHSbaJqwLxqitZ4DNGQOPiEi4o4T7uDNFW/irfDi0UazQbI1mb8P/zvpSYHbhactm8Z3W74LesyDzoMBy7XWnPPuORSUFNDZAiu6QIoy1nC9Me1wEv9nIbxcdLh74vQS+HsLeCyj4a9La7hjL7xRDGUaEpXRa+eiFJhRYnxpmIG2Zij2GQt6zy4zbgBJFhvJ6cdByTrjDNxiN2arPOn92pXlvG6McjVZjYotdsh62ZjXJhCrMUx7wKUD2L9pf7XmGgBLooWMAUfwYkWDybQG4qjTLqUdK25ewcRBE+mc1plB7Qfx2vjX+N/T/jfoc15f9jqOOiYPa58SuClm5a6V7Cnbg0bzYCtI8y/SDYcT/DonvFRk9LDRGLdyDc8dhE2uhr8up4b/8yd4AIc2jjOjxHjc0mwc+750o1mmqgRgQMZArGf/BqM+gWMfhKEvwITt0LLGr5sDK2HZ7cYZurvY6Hrp2A1L/gr2TCr7W5T44IFC6LtNMej3zbyy9BWGTRpGeo90rMnGrx6T1YTVbuX8d87HZJZ0FA6y/J84KnVK68Tr573e4P1dvrqz7YjOIwKWl7nLDl24Pd0O1gDNL7PLwROglcOl4T8H4NW2xtlYfU03j+yH4iBdd0zALxVgUzAxzejJ89gBIx27ga4WjGsQygQdzjRuwWyadnhGyqp8Luh3N6x9EKfjACdsK2ez24dTa3DlMnn+ZBZuW8jMZTNZ+8FaNs/bTFrnNIbeNFTa4sNIvjqFCEBrzYGKA4e6Sl517FUk+rsB1pRkSeLmoTcH3JbVMetQT5w9QVoykhRYAiRwCzCzxMQ9heCtp3PxOifMCjKYygr8LQ0mJMOD+4yz+3tawd4e8GMnmNcRCrSVIR2G1F1JJdf+IM0y2hgQdd5WPs6cxDaftdp4gHJ3OV9u+JINxRsYdO0gLnr3Is544gxJ8GEmSV5E1IGKA3y54UsW5i4MOCI0Fry75l06Pt2R9k+1p+XjLbl7/t3cdvxtDGg74NAkZJVsZhv3j76fYZnDAh4r0ZLI6+e+TpIliacOmCitMe5Ha5gQZGlXkyWBN86fwQr7EOq6JLm4Ajpa4M50sAXY3sIEz7aF/2tv9OC5dy98VAI/VsDUg3DWTtCmBCYNn1RHLVV0Ot9YeKQmnxvanQImM98f2E2Zp/bZvlKKRXmLGlaPCAlprhER89KSl7hr/l3YzDa01iTbkpl31TyOa3dctEM7ZO6mufzly78cGijl8rl4aelLeLSHRTcu4ssNX/LVxq/IK85jRJcR3Dj4RjLTMus85mUDL2Ng24FMWzaNLw5+xyV6A+VeNzbghwp4YJ/RtbFSkjkBlIk3znuDK4+9kklfT+KOUng6w7iYaq5y1u/0weBEoxnm+jT4rhw+LTPa5+3KOIub1fFwM5HdBE/06MVkZ1/+b9N3ODwOhncaztRxU+nSoku9789n6z/j398/xrZ9Do6zmXi8tY8RSQrMSTDwX4dWmOraoisJ5oRaPZjMykzH1I711iNCR6YaFhGxJH8Jp04/tdooU4B2ye3IvzM/4AIe0XDCGyewOH9xrXK71U7hXYU8sPABXlrykjF61eNkXO9xzLhgBt9t/Y73176PzWxj4qCJjO42OmgdO/dv4LI3j2Ory0V+gFGuCeYE7j/5fqacPAWtNeaHzWg0f7LBXelwWerh5h2n7/CF3Eq/VMC1u2C0HZ5pAy0q31qzHQbeD+3HQFIHdFJHNDrg9AuBvL3ibW6de2u1/0O7ycQ3Q05n5LB/QduTD5XnF+fT96W+hyZ1AzApEx1SOpB7ey4Wk5xfhlJUpxoWAuC17NdqjTIFo532x20/RrCZ270AABp5SURBVCGiwGoOdKrqucXPMXXpVBweB8XOYpxeJ3Nz5jLwlYFc+emVvLv2Xaavms64d8dx34L7gh6nY6u+WNuOZI8vcL96p9fJYz8/Rrm7HKUU/dr0A2CVC67aDaud4Pafm9VM8ACDEmBcsjGCtkXV705vOay6F745ET7vjlo4DpOnYbOi+bSPf377z1pf0uU+H3fvLq+W4MGYynnOn+fQKa0TdqudREsif2r3J3687kdJ8BEmSV5ExP6K/QFHmSqlgvYxj4ZB7QcFLLeZbLyx7I1aSc7hcZBblEupy0iWGk25u5xnFz3L5v2bg9bz0SUfMSxzWLV1ZquymCys27sOgOfOfg675XDD/bidsMJpNPEEuiDrBTa7YXyAZnMjSI+xzGDBfGMKggY46DgY9P9pzZ41ActP7noy22/fzsqbV7Lxto0sv3k5PdJ7NKg+ETqS5EVEXNjvQpKttbOOy+vi5K4nB3hGdDx62qMBZ6F86NSHOOBo+DSRCsW8zfOCbm9tb80v1//CqK6jAm53eV2H+t6f0fMM5l8znzE9xpCZmsmfup7BE/uNXjJmVb0936VhlweuSYP0elvAvJA/F5z76n09qQmp2MyBLusSdHpmML7Ee7fuTecWwfcR4SVJXkTEZQMv47h2xx1K9AqF3Wrn0dMepVVS7HShy+qYxXfXfMforqNJS0jjmDbH8OZ5bzJp+CRGdR0V9My7JrPJTKqt9tw3NT04+sFaXyo2s42Tu5xMp7ROh8pGdB7B/Kvnk3dnHnPHPca8cij1Gf3rTcropePVsNMD6Saj3R5LmjHnTF1MJnDurzdOi8nC7cNvD/gF+OApD9b7fBE9cuFVRIzL6+KDtR/w0bqPSE9K569D/8qJnU+MdlgNtqFwA8e/cTwV7grcPjcKRYIlAZ/PV2uwVLI1mZ3/2ElaQv2rrr+14i3umHcHPu3D7XVzWvfTeO+i92iR2CLwE4rWkvXan9jr8fFqWzjDbgxqqhwta01sC4OfhB7XGMv6/XihMRtkINY0uGgfNKCd3Kd9PPD9Azy/+HncXjepCak8dvpj/GXIX+p9rgivui68SpIX4gjkFuXyn1/+w687fqVvm77cPfJu1u1dx01f3mRMUKaNdvlZl83i9B6nN/i4Lq+LTfs20cbehnYp7QLvpDUU/gq7F7J4+X84PbcYhzbmoDFjzImz9JTr6dXnKmNq4Mp2/N3fw8JzjGkIamoz0li6r91o6Hs7JAWpuwq3102xs5j0pPQG98wR4SVJXogmcLmMxU/qmlag2FnMgi0LsJqtnN79dJKsIZ4c3ueBny6E3d+BxwFmGxsrKniqyMxqp4+xyYr7MpKM/vDKbIxIzZpqnM0DLJ8M658OfnxTgjGb5NgVh2ecFM2GdKEUohHmzoXevSExEVq2NKZQ9gYZpJuWkMYF/S5gfJ/xoU/wAFtnwK7vjNkh8YK3gj42mJaZyqLzX+DfHdti9ZYb293Fxr9L/2pMJgZQtLru4/uc4C4y5osXcUU6rAoRwM8/w0UXHV6ftrgYnnwSSkrg6TpOiMNmy1vGYts1eR1wYDm4AyzC7XXAz1fAyHehaG39dWgvFATvERRNxc5iPl73MbtLdzOq6yhGdh6JaurCtUcJSfJCBPDQQ7UXIC8vh1deMZYzTA7WBz1cgjWr+hyQO9OYAbL2k6BkPcw/CeydwVFQfz0JsdPTqdLS/KWMmTEGr8+Lw+Mg0ZLIyV1P5osrvpCBVQ0gzTVCBLB+feBysxkKGpArQ67ndca0BIHUMw0y3nIo22YsyF0Xsx363lGtaFfpLm7+8mY6PN2BPi/24cXFL0Z0YjmtNRd9eBHFzmLK3GV4tZcydxk/bPuBN5e/GbE4mjNJ8kIE8Kc/Bb7Q6vMZSxxGXPdrjQWzzcnQwL761ZhtxgRigRK9shgXXnv9FXpef6i4yFHEkNeG8NbKt9hVuotN+zdxz4J7uOGLGxr/Oo7Q73t/Z39F7X785e5y3lwhSb4hJMkLEcBDD0FSjeundjvcdVft8ogwWWD0l3DqXCMZmxIC7xds8JPPC5nj4aK90O+fkNIDWgyEAQ8Yxzw/D4Y+Xe2b7fXlr1PkKDo0pz4YyfWD3z8gtyg3hC8uOK110Lb3QNNkiNqkQUuIAIYOhW++gTvvhFWrICMD7rkHbrklikEpBW1HQZsRsOMjcNaYr92cBG1PCTLwSUP6YOMYg58wbvX4IfcHKjy1+9bbzDaWFyynW8tujXoZR2JA2wG0SGhxaG6gSnarnesHXR/kWaIqOZMXIoiRI2HxYnA4YMcOuPXW+pfgiwiTGU6cYbShVza/WJIhtXfw9nmf21iH9Qj0ad0Hq6l2847X56Vri65HGnWjmJSJjy/9mFRbKnarHYUixZbCyM4juXHIjRGJobmTM3khmqOOZ8M5a2HzG1C2AzqcBV0uhrmDA+9vTgTHLkgKvOB4ILcOu5XXlr2G23d4XSqryUqf1n0avlRgCJzQ6QS237GdD9Z+wO6y3YzqMopTup0iXSgbSJK8EJHk3G/M6b79I8AE3a6EP/2vMYfMkUrpDn96tHpZ29FQssmYTrgq7YXUPkd0+J6tejLnyjlc9/l1FJQW4NM+Tut2GjMunBHxBNsysSU3ZwVeR1fUrUnTGiilLgEeBPoBx2uts6tsuxe4AWN660la63pHWci0BiKueV0wZ6DRnbGyWcWUAC36w9nZEIp5YMq2s/mzgXxXXEq6STM+GRKtdjj2Ieg/uVGH1FpTUFqA3WqnZWLLpscoQq6uaQ2aeia/FrgQeK1Ghf2By4EBQEfgW6VUH60DLvEuxNEh/3OoKKjebu5zGmfeu76FDmc26fBaa+746Rle2+rCpM2Y8WJWJuaf8yBZjUzwYMwJL+uyNl9NOnXQWv+htd4QYNME4H2ttVNrvRXIAY5vSl1CNHv7V0Cg5fa8DjiwqsmHn71pNm8sfwOH10m5z0OJT1Pk9TJ+wdMRHcAkYku4etdkAjuqPM7zl9WilLpJKZWtlMreu3dvmMIRIgak9jZ6wdRkToLUnk0+/LRl06otnF2p3F0ecHFycXSoN8krpb5VSq0NcJtQ19MClAVs/NdaT9NaZ2mtszIyMhoatxDNT9dL/VMTVP2zM4OtJWSe2+TDB+rTDkZzi8PjaPLxRfNUb5u81npMI46bB1SdlLoTsLMRx6lXeTl89BHk5MDgwXDuucbc30LEHEsynPkbLLreWPwDjKkKTngLAvRHP1JXHXsVv+34rdbZvNaaEZ1HNPn4onkKVxfKL4B3lVLPYFx47Q0sCXUlmzfDiBFGoi8thZQU6NQJfv0V0tNDXZsQIZDaE874ATwVxsgqc2LIDn3lsVcyY/UMFucvptRVitVkxWKy8Pb5b5NoCV098UprjbPYidVuxWytdxX0ZqNJSV4pdQHwIpABzFZKrdRan6W1/l0p9SGwDvAAt4ajZ81110FhoTFpFBiJfssWmDIFpk4NdW1ChJAl9BPgWM1W5l01j7k5c5mzaQ5t7G2YOGgiPdJ7hLyueJMzL4fZf5tNcV4xJrOJQdcN4qxnz8KS0PyHEjXb5f/Ky6FFC/B4am9r1Qr27QtxcEKIuLQzeydvj34bd/nhkb2WJAt9J/Tl4vcujmJkDRfOfvIxySQz8oijmWOPsVxgeZ4xoVnmecYsliKgn//fz7gr3NXKPBUe1s9aT9meMpLbRnqFmNBqtv/zdjuMGgU//lh93c2EBLjyyujFJURU7f0Vvj/LmNbA6zDmtknrC2N+BEuQRUeOcoXrCwP2/bMkWDi442CzT/LN+pz37behfXtITQWLxbjw2q8f/O//RjsyIaJAa/jlcmPAldffZdJTCgd/hw3PRTe2GJY5PBNlrt3r2+vy0qpX7C2HeKSadZLv0sW40Prmm0Zi//hjWLbMSPpCHHVKNoEzwMUorwO2/jfy8TQTo+4bhTXJWm10j9Vu5fj/OZ7EFs2/V1Kzba6pZLPBJZdEOwohYoDJSpAxh2CyRTSU5qRVr1bc8NsNzP/nfLb/vB17Gzsj/jGCrFsCXsdsdpp9khdC+KV0h+TuUPwH1ZK92Q69bopaWM1B24Ft+fOcP0c7jLBo1s01QogaRn0CCRlgSQVTopHgO5whSf4oJmfyQsSTFsfA+dsh/ytjWuOME6HV0GhHJaJIkrwQ8cacAF0uinYUIkZIkhdCNE7RGtj4MpTvgA5jocdEsKZEOypRgyR5IcSR2/4x/HatsbKV9sLuhbDheWMZQ1uLaEcnqpALr0KII+Nzw+K/gLfcSPBg3C/PMxL9kXAXw/LJMCsTPusCq/4FnvLQx3wUkyQvhDgyRWsPJ/eqfA7Y8UnDj+PzwDcjYeNLULHTaPb542lYcLoxeleEhCR5IeJMSUEJG2dvpGBFAWGZZdaaZsyNE4itZcOPk/8llOUaTT6VfA44uBb2LGxKhKIKaZMXIk5orZl35zyyX8nGkmDB5/XRqlcrrpp3FSntQnhBNLWnMelZ0ZrqZ/TmZOgzqeHH2bc0yMLmTtiXbayaJZpMzuSFiBOr/7ua5a8vx+v04ix24i5zs/f3vXx82cehr+zkzyGlB1hSwJIGpgTocyt0vrDhx0jpbnwx1GROhOSuoYv1KCdn8kLEicXPLcZdVn1edJ/HR96iPEp3lZLSPoRn88ldYPwG2LcYHLuh9XBIan9kx+h6Oay8x7hoWzkNgzIZa+F2mhC6WI9yciYvRJxwFDkClpssJpzFzoDbmkQpaHOCkZCPNMEDWFPhjJ8gfbAxgZrJZnxZnPmLMaBLhIScyQsRJ/qe15clU5fgc/mqlduSbaT3jNGV7Vv0h7HLjCmSlQlsMRpnMyZn8kLEiZPuO4nktslYkoxzN2VWWO1WznvzPEzmRv6pl26BnV9D2bYQRhpAQmtJ8GEiZ/JCxInkjGRuWXMLy15fxpb5W0jvns7xk46n7YC2R34wrwN+vhR2zTcuqnqdkDkeRswEs8xN35yosPSjbaSsrCydnZ0d7TCEEEv/x1gf1lelnd+cBH1vh0GPRS8uEZBSapnWOuAqJ9JcI4SoTmvY8mb1BA/grYCcV6MTk2i0JiV5pdSTSqn1SqnVSqlZSqmWVbbdq5TKUUptUEqd1fRQhRCRoQ8vBF6TpyyyocQJrTUr317Jy/1f5smMJ/nw4g/ZtzHAerxh0NQz+fnAQK31ccBG4F4ApVR/4HJgAHA2MFUpZW5iXUKISFAmaD0s8LaMkyIbS5xY+O+FzLl1DoV/FFJeWM76Wet5fdjrFOUWhb3uJiV5rfU3Wh+axGIR0Ml/fwLwvtbaqbXeCuQAxzelLiFEBA2baoxmVVbjsclmzFkz9IXoxtUMOYud/PrUr7jLDw9U0z6Nu9zNz4//HPb6Q9m75nrgA//9TIykXynPX1aLUuom4CaALl26hDAcIUSjtRoK49bAhufgwEpoNQz6ToLkztGOrNnZt3EfZqsZT0X1Sd18Hh/bf94e9vrrTfJKqW+BQMPZpmitP/fvMwXwADMrnxZg/4DdeLTW04BpYPSuaUDMQohISOkGQ5+LdhTNXlqnNDyuALN2KmjVq1XY6683yWutx9S1XSl1LTAeOF0f7o+ZB1T9yu8E7GxskEII0VyltE+h97je5MzJweM4nOytSVZOuif81zia2rvmbOBu4DytddXlXL4ALldKJSilugO9gSVNqUsIIZqrC2dcyIBLB2BOMGNJtJDSMYULZ15IpxM61f/kJmrSYCilVA6QAFT2BVqktf6rf9sUjHZ6D3C71npufceTwVBCiHjmLnfjLHaS3DYZZQrUqt04dQ2GatKFV611rzq2PQo82pTjCyFEPLHarVjt1ojWKSNehRAijkmSF0KIOCZJXggh4pgkeSGEiGOS5IUQIo5JkhdCiDgmSV4IIeKYJHkhhIhjkuSFECKOSZIXQog4JkleCCHimCR5IYSIY5LkhRAijkmSF0KIOCZJXggh4pgkeSGEiGOS5IUQIo5JkhdCiDgmSV4IIeKYJHkhhIhjkuSFECKOSZIXQog4JkleCCHiWJOSvFLqEaXUaqXUSqXUN0qpjv5ypZR6QSmV498+JDThCiGEOBJNPZN/Umt9nNZ6EPAV8IC/fCzQ23+7CXilifUIIYRohCYlea11cZWHyYD2358AvKMNi4CWSqkOTalLCCHEkbM09QBKqUeBa4CDwKn+4kxgR5Xd8vxlBQGefxPG2T5dunRpajhCCCGqqPdMXin1rVJqbYDbBACt9RStdWdgJnBb5dMCHEoHKENrPU1rnaW1zsrIyGjs6xBCCBFAvWfyWusxDTzWu8Bs4N8YZ+6dq2zrBOw84uiEEEI0SVN71/Su8vA8YL3//hfANf5eNicAB7XWtZpqhBBChFdT2+QfV0r1BXzANuCv/vI5wDggBygHrmtiPUIIIRqhSUlea31RkHIN3NqUYwshhGg6GfEqhBBxTJK8EELEMUnyQggRxyTJCyFEHJMkL4QQcUySvBBCxDFJ8kIIEcckyQshRByTJC+EEHFMkrwQQsQxSfJCCBHHJMkLIUQckyQvhBBxTJK8EELEMUnyQggRxyTJCyFEHJMkL4QQcUySvBBCxDFJ8kIIEcckyQshRByTJC+EEHFMkrwQQsQxSfJCCBHHQpLklVKTlVJaKdXG/1gppV5QSuUopVYrpYaEoh4hhBBHpslJXinVGTgD2F6leCzQ23+7CXilqfUIIYQ4cqE4k38W+Cegq5RNAN7RhkVAS6VUhxDUJYQQ4gg0Kckrpc4D8rXWq2psygR2VHmc5y8LdIyblFLZSqnsvXv3NiUcIYQQNVjq20Ep9S3QPsCmKcB9wJmBnhagTAcoQ2s9DZgGkJWVFXAfIYQQjVNvktdajwlUrpQ6FugOrFJKAXQCliuljsc4c+9cZfdOwM4mRyuEEOKI1Jvkg9FarwHaVj5WSuUCWVrrQqXUF8BtSqn3geHAQa11QVODFSKeOT1OPvz9Q+bmzCUzNZObht5E79a9ox2WaOYaneTrMQcYB+QA5cB1YapHiLhQ5ipj5FsjydmfQ5m7DIvJwtTsqbx74btMOGZCtMMTzVjIkrzWuluV+xq4NVTHFiLevZL9Chv3baTCUwGAx+fB4/Mw8fOJ7Om9B6vZGuUIRXMlI16FiAEfrP3gUIKvyuvzsnLXyihEJOKFJHkhYkCKLSVguVd7SbYlRzgaEU8kyQsRA24ZdgvJ1urJXKHolNaJfm36RSkqEQ8kyQsRAy7ufzE3DL6BREsiqbZUUm2pdEjtwJdXfIm/i7IQjaKMa6SxISsrS2dnZ0c7DCGiZlvRNn7e/jNtk9tyWvfTMJvM0Q5JNANKqWVa66xA28LVhVII0QhdW3ala8uu0Q5DxBFprhFCiDgmSV4IIeKYJHkhhIhjkuSFECKOSZIXQog4FlNdKJVSe4Ft9ezWBiiMQDiNFcvxSWyNF8vxSWyNF8vxHUlsXbXWGYE2xFSSbwilVHaw/qCxIJbjk9gaL5bjk9gaL5bjC1Vs0lwjhBBxTJK8EELEseaY5KdFO4B6xHJ8ElvjxXJ8ElvjxXJ8IYmt2bXJCyGEaLjmeCYvhBCigSTJCyFEHIvpJK+UelIptV4ptVopNUsp1dJf3k0pVaGUWum/vVrlOUOVUmuUUjlKqRdUmCbjDhabf9u9/vo3KKXOqlJ+tr8sRyl1Tzji8tdziVLqd6WUTymVVaU86u9bXfH5t0X1vasRy4NKqfwq79e4+uKMtGi8L/XEk+v/HK1USmX7y1oppeYrpTb5/02PUCxvKaX2KKXWVikLGIsyvOB/H1crpYZEKb7Qf+a01jF7A84ELP77TwBP+O93A9YGec4S4ERAAXOBsRGOrT+wCkgAugObAbP/thnoAdj8+/QPU2z9gL7AQiCrSnnU37d64ov6e1cjzgeByQHKA8YZ7ngCxBGV96WemHKBNjXK/gPc479/T+XfSgRiORkYUvUzHywWYJz/c6+AE4DFUYov5J+5mD6T11p/o7X2+B8uAjrVtb9SqgOQprX+TRvvzDvA+RGObQLwvtbaqbXeCuQAx/tvOVrrLVprF/C+f99wxPaH1npDQ/eP5PtWT3xRf+8aKFickRZr70swE4Dp/vvTCeNnqyqt9Y/A/gbGMgF4RxsWAS39fxeRji+YRn/mYjrJ13A9xjdtpe5KqRVKqR+UUqP8ZZlAXpV98vxlkYwtE9gRIIZg5ZEWS+9bTbH43t3m//n+VpVmhlj5v4yVOKrSwDdKqWVKqZv8Ze201gUA/n/bRi264LHE0nsZ0s9c1FeGUkp9C7QPsGmK1vpz/z5TAA8w07+tAOiitd6nlBoKfKaUGoDxU6umRvcRbWRswWII9IUa1tgCiMj71oT4IvLeVauwjjiBV4BH/HU9AjyN8YUe8verkWIljqpGaq13KqXaAvOVUuujHE9Dxcp7GfLPXNSTvNZ6TF3blVLXAuOB0/1NCWitnYDTf3+ZUmoz0Afj261qk04nYGckY/PH0DlIDMHKQx5bkOdE5H1rbHxE6L2rqqFxKqVeB77yP6wrzkiKlTgO0Vrv9P+7Ryk1C6NJYbdSqoPWusDfBLIniiEGiyUm3kut9e7K+6H6zMV0c41S6mzgbuA8rXV5lfIMpZTZf78H0BvY4v/5VaKUOsHfO+QaINhZY1hiA74ALldKJSiluvtjWwIsBXorpborpWzA5f59IyYW3rd6xNR7V6NN9gKgshdEsDgjLeqfqaqUUslKqdTK+xidE9b6Y7rWv9u1ROezVSlYLF8A1/h72ZwAHKxs1omksHzmwn0FuYlXn3Mw2qFW+m+v+ssvAn7HuNq8HDi3ynOy/G/MZuAl/KN6IxWbf9sUf/0bqNJLBeMK/kb/tilhfN8uwPjmdwK7gXmx8r7VFV8svHc14pwBrAFW+//IOtQXZ6Rv0Xhf6oilh/+ztcr/OZviL28NLAA2+f9tFaF43sNoonT7P283BIsFoznkZf/7uIYqvb4iHF/IP3MyrYEQQsSxmG6uEUII0TSS5IUQIo5JkhdCiDgmSV4IIeKYJHkhhIhjkuSFECKOSZIXQog49v8Bkas6Pp9W9ZkAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#建立四个颜色的列表\n",
    "colored = ['orange', 'green','blue','purple']\n",
    "colr = [colored[i] for i in predict]\n",
    "plt.scatter(x[:,1], x[:, 20], color=colr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.xlabel('1')\n",
    "plt.ylabel('20')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "metadata": {
     "collapsed": false
    },
    "source": []
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
